home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / menu.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  2KB  |  95 lines

  1. /*
  2.  * menu.c : Menu creation and manipulation routines
  3.  *
  4.  * George Ferguson, ferguson@cs.rochester.edu, 23 Apr 1993.
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <X11/Intrinsic.h>
  9. #include <X11/Xaw/SimpleMenu.h>
  10. #include <X11/Xaw/SmeBSB.h>
  11. #include <X11/StringDefs.h>
  12. #include <X11/bitmaps/xlogo11>
  13. extern Widget toplevel;
  14.  
  15. /*
  16.  * Functions defined here:
  17.  */
  18. void initMenuCreator();
  19. Widget createMenu();
  20. void clearAllItemMarks();
  21. void setIthItemMark();
  22.  
  23. /*
  24.  * Data defined here:
  25.  */
  26. static Pixmap checkmarkBitmap;
  27.  
  28. /*    -    -    -    -    -    -    -    -    */
  29.  
  30. void
  31. initMenuCreator()
  32. {
  33.     checkmarkBitmap = XCreateBitmapFromData(XtDisplay(toplevel),
  34.                 XDefaultRootWindow(XtDisplay(toplevel)),
  35.                 xlogo11_bits,
  36.                 xlogo11_width,xlogo11_height);
  37. }
  38.  
  39. /*
  40.  * createMenu : Creates menu named "name" with "numItems", each of which
  41.  *    calls back to "callback". If "items" is non-NULL, then saves the
  42.  *    items in it.
  43.  */
  44. Widget
  45. createMenu(name,item_basename,numItems,items,callback)
  46. char *name,*item_basename;
  47. int numItems;
  48. SmeBSBObject *items;
  49. XtCallbackProc callback;
  50. {
  51.     Widget menu;
  52.     SmeBSBObject item;
  53.     char itemName[64];
  54.     int i;
  55.  
  56.     menu = XtCreatePopupShell(name,simpleMenuWidgetClass,toplevel,NULL,0);
  57.     for (i=0; i < numItems; i++) {
  58.     sprintf(itemName,"%s%d",item_basename,i);
  59.     item = (SmeBSBObject)XtCreateManagedWidget(itemName,smeBSBObjectClass,
  60.                            menu,NULL,0);
  61.     if (items != NULL)
  62.         *(items+i) = item;
  63.     XtAddCallback((Widget)item,XtNcallback,callback,(XtPointer)i);
  64.     }
  65.     return(menu);
  66. }
  67.  
  68. /*    -    -    -    -    -    -    -    -    */
  69.  
  70. void
  71. clearAllItemMarks(items,numItems)
  72. SmeBSBObject *items;
  73. int numItems;
  74. {
  75.     Arg args[1];
  76.     int i;
  77.  
  78.     for (i=0; i < numItems; i++) {
  79.     XtSetArg(args[0],XtNleftBitmap,None);
  80.     XtSetValues((Widget)(*(items+i)),args,1);
  81.     }
  82. }
  83.  
  84. void
  85. setIthItemMark(items,i,numItems)
  86. SmeBSBObject *items;
  87. int i,numItems;
  88. {
  89.     Arg args[1];
  90.  
  91.     clearAllItemMarks(items,numItems);
  92.     XtSetArg(args[0],XtNleftBitmap,checkmarkBitmap);
  93.     XtSetValues((Widget)(*(items+i)),args,1);
  94. }
  95.